package com.xxx.netty.unpool;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * Unpooled用法2
 */
public class NettyByteBuf02 {
    
    public static void main(String[] args) {
        //创建ByteBuf
        ByteBuf byteBuf = Unpooled.copiedBuffer("hello,world!", StandardCharsets.UTF_8);

        //使用相关的方法
        if (byteBuf.hasArray()) { // 检查 ByteBuf 是否有一个支撑数组（只有 HeapByteBuf才会返回true，DirectByteBuf返回false）
            byte[] content = byteBuf.array();  // 获取该数据的引用

            //将 content 转成字符串
            System.out.println(new String(content, StandardCharsets.UTF_8));
            System.out.println("byteBuf=" + byteBuf);

            System.out.println(byteBuf.arrayOffset()); // array中第一个byte的偏移量：0
            System.out.println(byteBuf.readerIndex()); // 读指针索引：0
            System.out.println(byteBuf.writerIndex()); // 写指针索引：12
            System.out.println(byteBuf.capacity()); // array容量（数组长度）：36

            //System.out.println(byteBuf.readByte()); // readByte()会向后移动指针
            System.out.println(byteBuf.getByte(0)); // 104（字母：h）

            int len = byteBuf.readableBytes(); // 可读的字节数： 12
            System.out.println("len=" + len);

            //使用for取出各个字节
            for (int i = 0; i < len; i++) {
                System.out.println((char) byteBuf.getByte(i));  // 将byte转换成char
            }

            // 按照某个范围读取
            System.out.println(byteBuf.getCharSequence(0, 4, StandardCharsets.UTF_8));  // 读取索引从0开始，成都为4的范围内的元素
            System.out.println(byteBuf.getCharSequence(4, 6, StandardCharsets.UTF_8));  // 读取索引从4开始，成都为6的范围内的元素
        }
    }
}
